package ui;

import domainmodel.Kaart;
import domainmodel.RaadNummer;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Container;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.net.URL;
import javax.swing.*;

/**
 *
 * @author Jasper Piens
 */
public class Ui extends JFrame {
    private Container c;
    private JPanel panel;
    private JButton start, gok;
    private ImageIcon icon;
    private RaadNummer hogerlager;
    private JTextField invoer;
    private Kaart kaart;
    private JMenuBar menuBar;
    private JMenuItem afsluiten, nieuwSpel;
    private JLabel kaartImageLabel, opdracht;

    public Ui(){
        super("Kaartspel");
        c = getContentPane();
        setupBackground();
        setupInitialLayout();
        c.add(panel);
        menuBarSetup();
        setJMenuBar(menuBar);
        setBounds(40,40,800,500);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setVisible(true);
    }
    
    public static void main(String[] args){
        Ui spel = new Ui();
    }

    private void setupBackground() {
        panel = new JPanel(){
            URL url = this.getClass().getResource("background.jpg");
            Image img = new ImageIcon(url).getImage();
            public void paintComponent(Graphics g){
                g.drawImage(img, 0, 0, getWidth(), getHeight(), this);
            }
        };
    }

    private void setupInitialLayout() {
        start = new JButton("Klik hiet om het spel te starten");
        panel.add(start, BorderLayout.CENTER);
        start.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e1) {
                panel.remove(start);
                panel.repaint();
                beginSpel();
            }
        } );
    }
    
    private void beginSpel() {
        hogerlager = new RaadNummer();
        kaart = hogerlager.getKaart();
        toonLayoutNieuwSpel();
    }

    private void toonLayoutNieuwSpel() {
        icon = laadAfbeelding();
        kaartImageLabel = new JLabel(icon);
        panel.add(kaartImageLabel);
        invoer = new JTextField(25);
        panel.add(invoer);
        gok = new JButton("Probeer");
        panel.add(gok);
        gok.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e1) {
                nieuweGok(invoer.getText());
            }
        } );
        opdracht = new JLabel(hogerlager.getOpdracht());
        opdracht.setForeground(Color.red);
        panel.add(opdracht);
        panel.repaint();
        setVisible(true);
    }
    
    public ImageIcon laadAfbeelding(){
        ImageIcon imageIcon;
        if(kaart.getOmgedraaid() == true){
            kaart.getNummer();
            String afbeelding = "kaarten/" + voorvoegsel() + kaart.getNummer() +".png";
            URL afb = this.getClass().getResource(afbeelding);
            imageIcon = new ImageIcon(afb);
            return imageIcon;
        }else{
            URL afb = this.getClass().getResource("kaarten/back.png");
            imageIcon = new ImageIcon(afb);
        }
        return imageIcon;
    }

    private String voorvoegsel() {
        String type = "";
        if(kaart.getType().equals("Klaveren")){
            type = "c";
        }
        if(kaart.getType().equals("Ruiten")){
            type = "d";
        }
        if(kaart.getType().equals("Harten")){
            type = "h";
        }
        if(kaart.getType().equals("Schoppen")){
           type = "s";
        }
        return type;
    }
    
    private void nieuweGok(String t) {
        String a[] = t.split(" ");
        Kaart tmp = new Kaart(a[0].toString(), Integer.parseInt(a[1]));
       if(hogerlager.speel(tmp) == true){
            toonLayoutGewonnen();
        }else{
            toonLayoutNieuweGok();
        }
    }
    
    private void menuBarSetup() {
        menuBar = new JMenuBar();
        JMenu bestand = new JMenu("Bestand");
        JMenu opties = new JMenu("Opties");
        menuBar.setOpaque(true);
        menuBar.add(bestand);
		menuBar.add(opties);

        afsluiten = new JMenuItem("Afsluiten");
        afsluiten.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e1) {
                dispose();
                System.exit(0);
            }
        });
        nieuwSpel = new JMenuItem("Nieuw spel");
        nieuwSpel.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e1) {
            	panel.removeAll();
                panel.repaint();
                beginSpel();
                panel.repaint();
            }
        } );
        
        bestand.add(afsluiten);
        opties.add(nieuwSpel);
    }
    
    private void toonLayoutGewonnen() {
        panel.remove(kaartImageLabel);
        panel.remove(invoer);
        panel.remove(gok);
        panel.remove(opdracht);
        icon = laadAfbeelding();
        kaartImageLabel = new JLabel(icon);
        panel.add(kaartImageLabel);
        JLabel gewonnen = new JLabel("Uw score: " + hogerlager.getPunten());
        gewonnen.setForeground(Color.red);
        panel.add(gewonnen);
        panel.repaint();
        setVisible(true);
    }

    private void toonLayoutNieuweGok() {
        panel.remove(kaartImageLabel);
        panel.remove(invoer);
        panel.remove(gok);
        panel.remove(opdracht);
        icon = laadAfbeelding();
        kaartImageLabel = new JLabel(icon);
        panel.add(kaartImageLabel);
        invoer = new JTextField(25);
        panel.add(invoer);
        gok = new JButton("Probeer");
        panel.add(gok);
        gok.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e1) {
                nieuweGok(invoer.getText());
            }
        } );
        opdracht = new JLabel(hogerlager.getOpdracht());
        panel.add(opdracht);
        opdracht.setForeground(Color.red);
        panel.repaint();
        setVisible(true);
    }
}